package cn.imvc.app.models;

import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Page;
import org.springframework.stereotype.Service;

import cn.imvc.app.entities.GoodsTypeValue;
import cn.imvc.app.repositories.GoodsTypeValueRepository;
import cn.imvc.core.ModelUtil;
import cn.imvc.data.domain.ViewRequest;

@Service
public class GoodsTypeValueModelImpl implements GoodsTypeValueModel {
	@Autowired
	GoodsTypeValueRepository goodsTypeValueRepository;
	@Autowired
	GoodsModel goodsModel;

	public Page<GoodsTypeValue> find(ViewRequest viewRequest) {
		return goodsTypeValueRepository.findAll("g","GoodsTypeValue g",ModelUtil.OrderByIdDesc(viewRequest));
	}

	public GoodsTypeValue get(int id) {
		return goodsTypeValueRepository.findOne(id);
	}

	public GoodsTypeValue save(GoodsTypeValue goodsTypeValue) {
		if(isHas(goodsTypeValue)){
			return null;
		}
		goodsTypeValue = goodsTypeValueRepository.saveAndFlush(goodsTypeValue);
		int goodsId= goodsTypeValue.getGoods().getId();
		goodsModel.updateGoodsType(goodsId, goodsTypeValueRepository.findByGoods(goodsTypeValue.getGoods()));
		return goodsTypeValue;
	}

	public GoodsTypeValue update(GoodsTypeValue goodsTypeValue) {
		if(isHas(goodsTypeValue)){
			return null;
		}
		goodsTypeValue = goodsTypeValueRepository.saveAndFlush(goodsTypeValue);
		int goodsId= goodsTypeValue.getGoods().getId();
		goodsModel.updateGoodsType(goodsId, goodsTypeValueRepository.findByGoods(goodsTypeValue.getGoods()));
		return goodsTypeValue;
	}

	public void delete(int id) {
		GoodsTypeValue goodsTypeValue = get(id);
		int goodsId= goodsTypeValue.getGoods().getId();
		goodsTypeValueRepository.delete(id);
		goodsModel.updateGoodsType(goodsId, goodsTypeValueRepository.findByGoods(goodsTypeValue.getGoods()));
	}

	public void deleteBatch(int[] ids) {
		for (int id : ids) {
			delete(id);
		}
	}

	/**
	 * 判断是否已存在该属性
	 */
	public boolean isHas(GoodsTypeValue goodsTypeValue) {
		boolean isHas = false;
		if(goodsTypeValue.getId() != 0){
			List<GoodsTypeValue> goodsTypeValues = goodsTypeValueRepository.findByGoodsIdAndTypeClassAndTypeValue(goodsTypeValue.getGoods().getId(), goodsTypeValue.getTypeClass(),goodsTypeValue.getTypeValue());
			if(goodsTypeValues != null && !goodsTypeValues.isEmpty() && goodsTypeValues.get(0).getId() != goodsTypeValue.getId()){
				isHas = true;
			}
		}else{
			List<GoodsTypeValue> goodsTypeValues = goodsTypeValueRepository.findByGoodsIdAndTypeClassAndTypeValue(goodsTypeValue.getGoods().getId(), goodsTypeValue.getTypeClass(),goodsTypeValue.getTypeValue());
			if(goodsTypeValues != null && !goodsTypeValues.isEmpty()){
				isHas = true;
			}
		}
		return isHas;
	}
}
